package com.jtbd.config;

import com.jtbd.dto.UserAuthDetailsEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.util.ObjectUtils;

import java.util.Collection;
import java.util.Collections;

/**
 * 自定义认证令牌类，继承自UsernamePasswordAuthenticationToken
 * 用于处理包含手机号和用户类型的认证信息
 */
public class CustomAuthentication extends UsernamePasswordAuthenticationToken {
    public static final String splitChar = ":";


    /**
     * 生成用户名字符串，将手机号和用户类型用分隔符连接
     *
     * @param phone    手机号码
     * @param userType 用户类型
     * @return 生成的用户名字符串，格式为"手机号:用户类型"
     */
    public static String generateUsername(String phone, Integer userType) {
        return phone + splitChar + userType;
    }

    /**
     * 分割用户名字符串，提取手机号和用户类型
     *
     * @param username 待分割的用户名字符串
     * @return 包含手机号和用户类型的字符串数组，如果输入为空或不包含分隔符则返回null
     */
    public static String[] splitUsername(String username) {
        // 检查用户名是否非空且包含分隔符
        if (!ObjectUtils.isEmpty(username) && username.contains(splitChar)) {
            return username.split(splitChar);
        }
        return null;
    }

    public CustomAuthentication(UserAuthDetailsEntity principal) {
        super(principal, principal.getPassword());
    }

    public CustomAuthentication(UserAuthDetailsEntity principal, Collection<? extends GrantedAuthority> authorities) {
        super(principal, principal.getPassword(), authorities);
    }
}

